package com.kfm.am.exec;

import java.io.*;
import java.util.*;

public class Exec01 {

    public static void main(String[] args) {
        // 请将上面的这段文字按照正常的顺序写到一个新的文件中。
        // 字符缓存流 readLine()
        // newLine()
        File file = new File("io/csb.txt");
        File target = new File("io/csb_ok.txt");
//        System.out.println(Arrays.toString("1".getBytes()));
//        System.out.println(Arrays.toString("11".getBytes()));
//        System.out.println(Arrays.toString("2".getBytes()));
//        System.out.println(Arrays.toString("a".getBytes()));
//        System.out.println(Arrays.toString("A".getBytes()));
        sort(file, target);

    }

    private static void sort(File f1, File f2) {
        try (BufferedReader bufferedReader = new BufferedReader(new FileReader(f1));
             // 先存到底层数组 存满了一次性写出去
             BufferedWriter bufferedWriter = new BufferedWriter(new FileWriter(f2))) {
//            bufferedReader.readLine() == null // 读取结束
            String str = "";
            List<String> list = new ArrayList<>();
            // 第一次读取的时候就把底层的数组存满
            while (bufferedReader.ready()) { // 接下来流里面是否还有内容
                str = bufferedReader.readLine();
                list.add(str);
            }
            System.out.println(Arrays.toString("1".getBytes()));
//            Collections.sort(list); // 按照自然排序
            list.sort(new Comparator<String>() {
                @Override
                public int compare(String o1, String o2) {
                    // \\.
//                    o1.charAt(0). // 有问题 如果有两位就出错了
//                    o1.substring(0, o1.indexOf('.'));
                    int i1 = Integer.parseInt(o1.split("\\.")[0]);
                    int i2 = Integer.parseInt(o2.split("\\.")[0]);
                    return i1 - i2;
                }
            });
            int a = 2;
//            list.forEach(o -> {
//                try {
//                    a = 3; // 报错
//                    bufferedWriter.write(o); // 箭头函数里面使用外面的变量 该变量都会被隐式final修饰 不可以改变
//                    bufferedWriter.newLine();
//                } catch (IOException e) {
//                    System.out.println(e.getMessage());
//                }
//
//            });

            for (String s : list) {
                bufferedWriter.write(s);
                bufferedWriter.newLine();
            }

        } catch (IOException e) {
            System.out.println(e.getMessage());
        }
    }
}
